/*
day209
2020.3.4
*/
#include<iostream>
#include<vector>
using namespace std;

class Solution {
public:
    bool circularArrayLoop(vector<int>& nums) {
    	vector<int> flag(nums.size());
    	for(int i=0;i<flag.size();++i)
    	{
    		flag[i]=0;
		}
    	
    	for(int i=0;i<nums.size();++i)
    	{
    		if(flag[i]==1 && nums[i]==0)
    		{
    			continue;
			}
			
    		int tem=i;
    		int fast=tem,slow=tem;
    		while(true)
    		{
    			int cur;
    			cur=get_next(slow,nums);
    			flag[cur]=1;
    			if(slow==cur || nums[slow]*nums[cur]<=0)
    			{
    				break;
				}
				slow=cur;
				
				
				cur=get_next(fast,nums);
				flag[cur]=1;
    			if(fast==cur || nums[fast]*nums[cur]<=0)
    			{
    				break;
				}
				fast=cur;
				
				
				cur=get_next(fast,nums);
				flag[cur]=1;
    			if(fast==cur || nums[fast]*nums[cur]<=0)
    			{
    				break;
				}
				fast=cur;
				
				if(fast==slow)
				{
					return true;
				}
				
			}
		}
    	
		return false;
    }
    
    int get_next(int point,vector<int>& nums)
    {
    	int tem=nums[point];
    	int next;
    	if(tem>=0)
    	{
    		next=(tem+point)%nums.size();
		}
    	
    	if(tem<0)
    	{
    		int a=tem/nums.size();
    		next=(point+tem+abs(a)*nums.size()+nums.size())%nums.size();
		}
    	return next; 
	}
};

int main()
{
	vector<int> nums={2,-1,1,2,2};
	Solution s;
	int i=0;
//	while(1)
//	{
//		cout<<i<<endl;
//		i=s.get_next(i,nums);
//	}
	cout<<s.circularArrayLoop(nums)<<endl;
	return 0;
}
